﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using DevExpress.XtraEditors;

namespace PRE
{
    public partial class FrmLophoc : DevExpress.XtraEditors.XtraForm
    {
        ServiceReference_Lophoc.WS_LophocSoapClient sr_lophoc = new ServiceReference_Lophoc.WS_LophocSoapClient();
        IList<ServiceReference_Lophoc.Lophoc> tb;

        private static bool _isAdd;
        private static bool _isEdit; 

        public FrmLophoc()
        {
            InitializeComponent();
            
        }

        private void FrmLophoc_Load(object sender, EventArgs e)
        {
            tb = (IList<ServiceReference_Lophoc.Lophoc>)sr_lophoc.SelectLophoc();
            grcMain.DataSource = tb;
            Readonly(); ChangeStatus(); lbMsg.Visible = false;
            bar1.Visible = true;

            if (tb != null)
            {
                ClearDataBindings();
                if (tb.Count > 0)
                    DataBindings();
            }
             var ok =bar1.Visible; // tim xe tai so no bi phon, e hieu roi, 
        }

        #region Base

        private void DataBindings()
        {
            txtMalop.DataBindings.Add("EditValue", tb, ".malop");
            txtTenlop.DataBindings.Add("EditValue", tb, ".tenlop");
        }

        private void ClearDataBindings()
        {
            txtMalop.DataBindings.Clear();
            txtTenlop.DataBindings.Clear();
        }

        private void Readonly(bool isTrue = true)
        {
            txtMalop.Properties.ReadOnly = isTrue;
            txtTenlop.Properties.ReadOnly = isTrue;
            grcMain.Enabled = isTrue;
        }

        private void ChangeStatus(bool isTrue = true)
        {
            btnAdd.Enabled = isTrue;
            btnEdit.Enabled = isTrue;
            btnDelete.Enabled = isTrue;
            btnRefresh.Enabled = isTrue;
            btnClose.Enabled = isTrue;

            btnSave.Enabled = !isTrue;
            btnCancel.Enabled = !isTrue;
        }

        private void ClearData()
        {
            txtMalop.ResetText();
            txtTenlop.ResetText();
        }

        #endregion

        #region Button

        private void btnAdd_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            ClearDataBindings();
            Readonly(false); ChangeStatus(false); ClearData();
            txtMalop.Focus(); _isAdd = true; _isEdit = false;
        }

        private void btnEdit_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            Readonly(false); ChangeStatus(false);
            txtMalop.Properties.ReadOnly = true;
            txtTenlop.Focus(); _isAdd = false; _isEdit = true;
        }

        private void btnDelete_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            int id = Convert.ToInt32(grvMain.GetFocusedRowCellValue("id"));
            if (MessageBox.Show("Bạn có muốn xóa không ?", "Thông Báo", MessageBoxButtons.OKCancel) == DialogResult.OK)
            {
                var ok = sr_lophoc.DeleteLophoc(id);
                if (ok)
                    FrmLophoc_Load(sender, e);
                else
                    MessageBox.Show("Lỗi! Vui lòng kiểm tra lại dữ liệu", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void btnRefresh_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            FrmLophoc_Load(sender, e);
        }

        private void btnSave_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            if (_isAdd)
            {
                if (txtMalop.Text == "" || txtTenlop.Text == "")
                    MessageBox.Show("Lỗi! Vui lòng nhập đầy đủ thông tin", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                else
                {
                    ServiceReference_Lophoc.Lophoc lp = new ServiceReference_Lophoc.Lophoc();

                    lp.malop = txtMalop.Text;
                    lp.tenlop = txtTenlop.Text;

                    var ok = sr_lophoc.InsertLophoc(lp);
                    if (ok)
                    {
                        FrmLophoc_Load(sender, e);
                        btnAdd_ItemClick(sender, e);
                    }
                    else
                    {
                        MessageBox.Show("Lỗi! Vui lòng kiểm tra lại dữ liệu", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        txtMalop.Focus();
                    }
                }
            }

            if (_isEdit)
            {
                ServiceReference_Lophoc.Lophoc lp = new ServiceReference_Lophoc.Lophoc();
                int id = Convert.ToInt32(grvMain.GetFocusedRowCellValue("id"));

                lp.id = id;
                lp.tenlop = txtTenlop.Text;

                var ok = sr_lophoc.UpdateLophoc(lp);
                if (ok)
                {
                    FrmLophoc_Load(sender, e);
                    Readonly(); ChangeStatus();
                }
                else
                {
                    MessageBox.Show("Lỗi! Vui lòng kiểm tra lại dữ liệu", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    txtTenlop.Focus();
                }
            }

        }

        private void btnCancel_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            FrmLophoc_Load(sender, e);
        }

        private void btnClose_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            this.Close();
        }

        #endregion

        private void txtMalop_TextChanged(object sender, EventArgs e)
        {
            ServiceReference_Lophoc.Lophoc lp = new ServiceReference_Lophoc.Lophoc();
            lp.malop = txtMalop.Text;
            IList<ServiceReference_Lophoc.Lophoc> tb2 = sr_lophoc.Check_Malop(lp);
            if (tb2.Count > 0)
            {
                lbMsg.Text = "Mã lớp đã tồn tại trong hệ thống, vui lòng nhập lại";
                txtMalop.Focus();
            }
            else
                lbMsg.Text = "";
        }

    }
}